package com.efast.dmom.mgmt.service.mes;

import java.util.List;
import java.util.Map;

import com.efast.cafe.framework.bean.ResultBean;
import com.efast.dmom.mgmt.bean.mes.ProductConfigAcceptBean;
import com.efast.dmom.mgmt.bean.mes.WorkOrderInfoDto;
import com.efast.dmom.mgmt.bean.mes.prodConfig.SopUploadBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckAreaBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckDefectCodeBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckItemBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckPartBean;
import com.efast.dmom.mgmt.entity.mes.TrBasProductConfig;
import com.efast.dmom.mgmt.utils.Assist;


public interface TrBasProductConfigService {
	/**
	 * 获得TrBasProductConfig数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	long getTrBasProductConfigRowCount(Assist assist);

	/**
	 * 获得TrBasProductConfig数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	List<TrBasProductConfig> selectTrBasProductConfig(Assist assist);

	/**
	 * 获得一个TrBasProductConfig对象,以参数TrBasProductConfig对象中不为空的属性作为条件进行查询
	 * 
	 * @param obj
	 * @return
	 */
	TrBasProductConfig selectTrBasProductConfigByObj(TrBasProductConfig obj);

	/**
	 * 通过TrBasProductConfig的id获得TrBasProductConfig对象
	 * 
	 * @param id
	 * @return
	 */
	TrBasProductConfig selectTrBasProductConfigById(Integer id);

	/**
	 * 插入TrBasProductConfig到数据库,包括null值
	 * 
	 * @param value
	 * @return
	 */
	int insertTrBasProductConfig(TrBasProductConfig value);

	/**
	 * 插入TrBasProductConfig中属性值不为null的数据到数据库
	 * 
	 * @param value
	 * @return
	 */
	int insertNonEmptyTrBasProductConfig(TrBasProductConfig value);

	/**
	 * 批量插入TrBasProductConfig到数据库
	 * 
	 * @param value
	 * @return
	 */
	int insertTrBasProductConfigByBatch(List<TrBasProductConfig> value);

	/**
	 * 通过TrBasProductConfig的id删除TrBasProductConfig
	 * 
	 * @param id
	 * @return
	 */
	int deleteTrBasProductConfigById(Integer id);

	/**
	 * 通过辅助工具Assist的条件删除TrBasProductConfig
	 * 
	 * @param assist
	 * @return
	 */
	int deleteTrBasProductConfig(Assist assist);

	/**
	 * 通过TrBasProductConfig的id更新TrBasProductConfig中的数据,包括null值
	 * 
	 * @param enti
	 * @return
	 */
	int updateTrBasProductConfigById(TrBasProductConfig enti);

	/**
	 * 通过辅助工具Assist的条件更新TrBasProductConfig中的数据,包括null值
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	int updateTrBasProductConfig(TrBasProductConfig value, Assist assist);

	/**
	 * 通过TrBasProductConfig的id更新TrBasProductConfig中属性不为null的数据
	 * 
	 * @param enti
	 * @return
	 */
	int updateNonEmptyTrBasProductConfigById(TrBasProductConfig enti);

	/**
	 * 通过辅助工具Assist的条件更新TrBasProductConfig中属性不为null的数据
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	int updateNonEmptyTrBasProductConfig(TrBasProductConfig value, Assist assist);

	/**
	 * 通过operationId及partNoVersion获取产品定义信息
	 * 
	 * @param dto
	 * @return
	 */
	TrBasProductConfig getCfgConfig(WorkOrderInfoDto dto);
	
	String getOperationIdByStationName(Integer stationName);
	/**
	 * 更新质量门状态
	 * 
	 * @param dto
	 * @return
	 */
	void updateIsQualityGate(Map<String, Object> map);
	
	ResultBean selectQualityGate(Map<String,Object> map);
	
	ResultBean selectDefectFlagFromSome(Map<String,Object> map);
	
	ResultBean selectQualityGateByid(Map<String,Object> map);
	
	ResultBean selectShowDefectSectionGateByid(Map<String,Object> map);
	
	void updateDefectCodeFlag(Map<String, Object> map);
	
	List<QMCheckPartBean> selectAllBomItemPart(String partNoVersion);
	
	List<QMCheckAreaBean> selectAllArea();
	
	List<QMCheckItemBean> selectItemfromShop (Integer stationName);
	
	List<QMCheckDefectCodeBean> selectDefectcodefromItem(Map<String, Object> map);
	
	void uploadSop(SopUploadBean sopBean);
	
	public String getFormIdByProductConfigId(Integer productConfigId);
	/**
	 * 更新拉入拉出状态
	 * @param map
	 * return
	 */
	void updateIsInAndOut(Map<String, Object> map);
	ResultBean selectShowInAndOutSectionGateByid(Map<String, Object> map);
	public int getAttachId(int routeId, int operationId);

	public void updateIsAutoStart(Map<String, Object> map);

	ResultBean selectIsAutoStartSectionGateByid(Map<String, Object> map);
	
	/**
	 *是否为合拼工位通过tr_bas_product_config的id查询      是否为拼接的工位（0：否，1：是）
	 * @param map
	 * return
	 */
	ResultBean selectSpliceByid(Integer id);
	/**
	 *保存合拼工位信息通过tr_bas_product_config的id查询      是否为拼接的工位（0：否，1：是）
	 * @param map
	 * return
	 */
	ResultBean saveIsSplice(Integer productConfigId,Integer isSplice);

	/**
	 * 更新合格证编号工位
	 * @param map
	 */
	void updateIsCertificate(Map<String, Object> map);

	ResultBean selectIsCertificateSectionGateByid(Map<String, Object> map);
	/**
	 * 更新vin绑定
	 * @param map
	 */
	void updateIsVinBinding(Map<String, Object> map);
	/**
	 * 查询是否为Vin绑定工位
	 * @param map
	 */
	ResultBean selectIsVinBindingSectionGateByid(Map<String, Object> map);

	/**
	 * 配置项更新
	 * @param productConfigAcceptBean
	 * @return
	 */
	void updateConfigurationItem(ProductConfigAcceptBean productConfigAcceptBean);

	ResultBean updateIsShowHeadStation(Map<String, Object> map);

	ResultBean selectHeadStationByid(Map<String, Object> map);
}